"use strict";
// class 类(属性,方法)
/**
 * public 可以在外部||当前||子类 使用
 * protected 被保护的 可以被子类使用||当前类使用
 * private 私有的 只能在当前类使用
 */
class Person {
    // constructor 构造函数为class提供的
    /**
     * @param name
     * @param username public username:string 等同与在上面写了是一样的
     */
    constructor(name, username) {
        this.username = username;
        this.gender = '女';
        this.age = 27; //默认赋值27
        this.name = name; //this.name为上面定义的name =name为外部传入name
        this.username = username;
    }
    printAge(age) {
        this.age = age;
        console.log('年龄', this.age);
    }
    // this.gender 是受保护的 可以定义方法 不然外面是不可以打印或调用
    setGender(gender) {
        this.gender = gender;
        console.log('gender', this.gender);
    }
}
const person = new Person('周', '周家人');
// console.log('person', person.name);
// console.log('username', person.username);
// person.printAge()//27
person.printAge(18); //可以传值
// -----------------------类的继承 extends
console.log('-----------------------类的继承 extends');
/**
 * Student 类 继承 Person 类 可以获得Person中所有的内容 但其中的private可以获得但不可以使用
 */
class Student extends Person {
    // 子类想调用父类就需要构造函数并传递父类需要用到的东西
    constructor(name, username, studentId) {
        // super调用父类并传参
        super(name, username);
        this.studentId = studentId;
        // console.log('访问protected被保护的gender ', this.gender)//女
        // console.log('访问private私有的age ', this.age)//属性“age”为私有属性，只能在类“Person”中访问。
    }
}
const zhou = new Student('周子类', '周子类类', 1);
console.log('Student---值', zhou);
// --------------------------------class set get 修饰词 用于隔离私有属性和可公开属性
console.log('--------------------------------class set get 修饰词 用于隔离私有属性和可公开属性');
class Person2 {
    constructor() {
        this._name = '周2';
    }
    static calcCircle(value) {
        return this.PI * value;
    }
    // 私有属性赋值
    set setName(value) {
        this._name = value;
    }
    // 私有属性取值
    get getName() {
        return this._name;
    }
}
Person2.PI = 3.14; //static静态 可以直接取当前的类,不用实例
// let person2 = new Person2()
// console.log('取值', person2.getName);
// person2.setName = "修改后的name周3"
// console.log('取值2', person2.getName);
console.log('直取静态PI', Person2.PI);
console.log('请用class中静态方法', Person2.calcCircle(20));
